#pragma once

#ifdef E2D_BUILD_TRANS
#include "e2d/yml/trans/Serializer.h"
#endif
#ifdef E2D_BUILD_RENDER
#include "e2d/yml/render/Serializer.h"
#endif
#ifdef E2D_BUILD_AUDIO
#include "e2d/yml/audio/Serializer.h"
#endif
#ifdef E2D_BUILD_PHYSICS
#include "e2d/yml/physics/Serializer.h"
#endif
#ifdef E2D_BUILD_FUI
#include "e2d/yml/fui/Serializer.h"
#endif

#include "e2d/yml/impl/Serializer.h"

namespace e2d
{
	struct FinalSerializer
	{

#ifdef E2D_BUILD_TRANS
		e2d::trans::Serializer m_TransSerializer;
#endif
#ifdef E2D_BUILD_RENDER
		e2d::render::Serializer m_RenderSerializer;
#endif
#ifdef E2D_BUILD_AUDIO
		e2d::audio::Serializer m_AudioSerializer;
#endif
#ifdef E2D_BUILD_PHYSICS
		e2d::physics::Serializer m_PhysicsSerializer;
#endif
#ifdef E2D_BUILD_FUI
		e2d::fui::Serializer m_FuiSerializer;
#endif

		e2d::impl::Serializer m_ImplSerializer;

		void EncodeEntity(YAML::Node& node, const e2d::Entity& entity);
		
		void DecodeEntity(const YAML::Node& node, e2d::Entity& entity);


	};
}

